// 使用条件类型来分别得到一个接口签名和成员列表
type T1 = {
    [k: string|symbol|number]: string | number // 这个叫索引签名
    a: string
    b: number
    c: 1
}

type Keys<T, U> = {
    [k in keyof T as (
        U extends k ? never : k
    )]: T[k]
}

// 成员列表
type keys = Keys<T1, string>
type keys1 = Keys<keys, symbol>
type keys2 = Keys<keys1, number>

type Signs<T, U> = {
    [k in keyof T as (
        U extends k ? k : never
    )]: T[k]
}
// 取接口索引签名的类型
type signs = Signs<T1, string|symbol|number>
